# 当做装饰器使用，把一个普通的函数变成一个agent可以调用的工具
from langchain_core.tools import tool
from datetime import datetime
from zoneinfo import ZoneInfo

import urllib.parse
import json5
from qwen_agent.tools.base import BaseTool, register_tool

@register_tool('get_one_member_introduction')
class GetOneMemberIntroduction(BaseTool):
    description = "查询单个成员的介绍！入参：成员名字。出参：对应的成员介绍"
    parameters = [{
        'name': 'prompt',
        'type': 'string',
        'description': '人员的名字',
        'required': False
    }]
    def call(self, params: str, **kwargs) -> str:
        # 解析 params 参数
        membername = json5.loads(params).get('membername', '').strip()  # 获取 membername 参数
        
        # 根据 membername 参数返回不同的成员介绍
        if membername == "冯轩":
            return """- **冯轩**：
      - **角色**：研发负责人，技术架构师，人工智能算法专家。
      - **贡献**：作为项目中的绝对骨干成员，具备全链路技术实战能力，主导需求分析、架构设计、技术规划、开发与部署全流程。负责Qwen2-VL模型的微调与优化，显著提升模型性能，并推动团队参与天池大赛，取得排名298的优异成绩。擅长构建高可用、可扩展的系统架构，解决复杂技术难题，通过自动化工具实现高效部署与运维，确保系统稳定运行与持续优化。在团队中承担核心角色，推动项目高质量交付，支撑业务高速增长。
      - **背景**：拥有超过 10 年的软件开发和人工智能领域经验，曾在多家知名科技公司担任技术负责人。"""
        elif membername == "刘翔":
            return """- **刘翔**：
      - **角色**：PM，人工智能算法专家。
      - **贡献**：作为项目PM，深度参与整体开发，主导知识管理功能模块的设计与实现，专注于提升 Doraemon-Bot 的语言理解能力。通过构建高效的知识库和语义分析系统，优化问答准确性和响应速度，显著提升用户体验。同时，协调团队资源，推动项目高质量交付，确保系统的高可用性和可扩展性，为业务增长提供坚实的技术支持。
      - **背景**：博士毕业于清华大学计算机科学与技术专业，研究方向为自然语言处理与机器学习。"""
        elif membername == "张答":
            return """- **张答**：
      - **角色**：深度学习工程师。
      - **贡献**：负责深度学习模型的训练与调优，确保模型的高精度和高效性。
      - **背景**：曾在 Google DeepMind 实习，专注于深度学习模型的优化与部署。"""
        elif membername == "陈华伟":
            return """- **陈华伟**：
      - **角色**：多模态学习技术专家。
      - **贡献**：负责多模态学习技术的开发与应用，支持文本、图像、音频等多种数据形式的处理。
      - **背景**：一个人工智能的爱好者，研究方向为多模态学习与计算机视觉。"""
        elif membername == "向花妹":
            return """- **向花妹**：
      - **角色**：用户体验设计师。
      - **贡献**：负责用户交互体验的设计与优化，确保 Doraemon-Bot 的界面友好且易用。
      - **背景**：拥有丰富的用户体验设计经验，曾在多家互联网公司担任 UX 设计师。"""
        elif membername == "武毅":
            return """- **武毅**：
      - **角色**：系统运维与性能优化工程师。
      - **贡献**：负责系统的部署与性能优化，确保 Doraemon-Bot 的高效运行。
      - **背景**：曾在阿里云担任高级运维工程师，专注于大规模分布式系统的性能优化。"""
        else:
            raise ValueError("其它人员暂不支持。截止到目前人工智能“机器猫”客服核心成员是 [冯轩，刘翔，张答，陈华伟，向花妹，武毅]等人。")

@register_tool('get_current_datetime')
class GetCurrentDatetime(BaseTool):
    """
    获取当前日期和时间（包含时区）
    """
    description = "获取当前日期和时间"
    parameters = []

    def call(self, params: str, **kwargs) -> str:
        # 获取当前日期和时间
        # now = datetime.now()
        now = datetime.now(ZoneInfo("Asia/Shanghai"))  # 设置为上海时区
        
        # 格式化日期时间
        formatted_date = now.strftime("%Y-%m-%d %H:%M:%S %Z%z")
        
        # 返回 JSON5 格式的时间
        return json5.dumps({'current_time': formatted_date}, ensure_ascii=False)

@register_tool('my_image_gen')
class MyImageGen(BaseTool):
    # `description` 用于告诉智能体该工具的功能。
    description = 'AI 绘画（图像生成）服务，输入文本描述，返回基于文本信息绘制的图像 URL。'
    # `parameters` 告诉智能体该工具有哪些输入参数。
    parameters = [{
        'name': 'prompt',
        'type': 'string',
        'description': '期望的图像内容的详细描述',
        'required': True
    }]

    def call(self, params: str, **kwargs) -> str:
        # `params` 是由 LLM 智能体生成的参数。
        prompt = json5.loads(params)['prompt']
        prompt = urllib.parse.quote(prompt)
        return json5.dumps(
            {'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},
            ensure_ascii=False)